package com.rpp.repository;

import com.rpp.bean.Person;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Description
 * @Author peng
 * @Date 2020/10/13 2:22 下午
 */
@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long> {

    /**
     * 查看money 大于指定值的Person 列表
     */
    @Query("match(p:Person) where p.money>{money} return p")
    List<Person> personList(@Param("money") double money);

    /**
     * 指定开始的名字 和 结束的名字 查询最短路径  限定深度为4以层包含4
     */
    @Query("match p=shortestPath((person:Person{name:{startName}})-[*1..4]-(person2:Person {name:{endName}})) return p")
    List<Person> shortestPath(@Param("startName") String startName, @Param("endName") String endName);

    /**
     * 查询一个节点关联深度为2的所有节点
     *
     * @param name
     * @return
     */
    @Query("match p =(person:Person {name:{name}})-[*1..2]-(:Person) return p")
    List<Person> personListDept(@Param("name") String name);

    /**
     * 查询两个节点之间的所有节点
     *
     * @param startName
     * @param endName
     * @return
     */
    @Query("match p=((person:Person{name:{startName}})-[*]-(person2:Person {name:{endName}})) return p")
    List<Person> findAllPath(@Param("startName") String startName, @Param("endName") String endName);
}
